#ifndef IPLUGIN_H
#define IPLUGIN_H

#include <wx/wx.h>
#if defined(__WIN32__)
	#define IMPLEMENT_PLUGIN(name) extern "C" __declspec(dllexport) Plugin* CreatePlugin() { return new name();};
#else
	#define IMPLEMENT_PLUGIN(name) extern "C" Plugin* CreatePlugin() { return new name();};
#endif

//the plugin interface (a.k.a. abstract class)
//our plugin will contain GUI in itself - therefore we need to make it extend wxEvtHandler (or wxDialog for that matter)
class Plugin : public wxEvtHandler
{
public:
	//from example
	virtual void PerformTasks()=0;
	virtual wxWindow* GetGUI(wxWindow* parent)=0;	
	//mine
	virtual wxString getPluginName()=0;//unique name for plugin
	virtual wxString getTreeUID()=0; //unique ID for plugin
	virtual wxString getTreePath()=0;// '/' separated categories describing path to plugin in tree
	virtual wxString getTreeName()=0;//displayed name for plugin in design tree
	virtual wxString getIconFileName()=0; //name of icon associated with plugin
	virtual bool hasDisplayTabGUI()=0;//does plugin show in Display Tab? 
};

//define a function pointer type for convenience
#ifndef __PLUGIN_FUNCTION
#define __PLUGIN_FUNCTION
typedef Plugin* ( *CreatePlugin_function)();
#endif //__PLUGIN_FUNCTION

#endif
